package com.chunfeng.mypen.service.impl;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.chunfeng.mypen.dao.FileDao;
import com.chunfeng.mypen.entity.File;
import com.chunfeng.mypen.properties.SystemProperties;
import com.chunfeng.mypen.result.JsonRequest;
import com.chunfeng.mypen.result.exenum.RequestException;
import com.chunfeng.mypen.service.FileService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Objects;

/**
 * 文件业务层
 *
 * @author by 春风能解释
 * <p>
 * 2023/11/21
 */
@Service
public class FileServiceImpl extends ServiceImpl<FileDao, File> implements FileService {

    /**
     * 文件Dao
     */
    @Autowired
    private FileDao fileDao;
    /**
     * 系统设置
     */
    @Autowired
    private SystemProperties systemProperties;

    /**
     * 条件查询文件
     *
     * @param current 当前页
     * @param size    每页长度
     * @param file    条件
     * @return JSON
     */
    @Override
    public JsonRequest<List<File>> lookAllFile(Integer current, Integer size, File file) {
        Page<File> filePage = fileDao.lookFile(new Page<>(current, size), file);
        //获取列表
        List<File> files = filePage.getRecords();
        if (files.isEmpty()) {
            return JsonRequest.error(RequestException.NOT_FOUND);
        }
        Map<String, Object> page = new HashMap<>();
        //记录总页数
        page.put(systemProperties.getPageKeyName(), filePage.getTotal());
        return JsonRequest.success(files, page);
    }

    /**
     * 添加一个文件
     *
     * @param file 文件信息
     * @return JSON
     */
    @Override
    public JsonRequest<Integer> insertOneFile(File file) {
        int column = fileDao.insert(file);
        if (column < 1) {
            return JsonRequest.error(RequestException.INSERT_ERROR);
        }
        return JsonRequest.success(column);
    }

    /**
     * 修改一条文件信息
     *
     * @param file 文件信息
     * @return JSON
     */
    @Override
    public JsonRequest<Integer> updateFile(File file) {
        File file1 = fileDao.selectById(file.getId());
        if (Objects.isNull(file1)) {
            return JsonRequest.error(RequestException.NOT_FOUND);
        }
        int column = fileDao.updateById(file);
        if (column < 1) {
            return JsonRequest.error(RequestException.UPDATE_ERROR);
        }
        return JsonRequest.success(column);
    }

    /**
     * 批量删除文件
     *
     * @param fileId 文件ID
     * @return JSON
     */
    @Override
    public JsonRequest<Integer> deleteFile(List<String> fileId) {
        Integer size = fileDao.selectCountById(fileId);
        if (size != fileId.size()) {
            return JsonRequest.error(RequestException.NOT_FOUND);
        }
        int column = fileDao.deleteBatchIds(fileId);
        if (column < 1) {
            return JsonRequest.error(RequestException.DELETE_ERROR);
        }
        return JsonRequest.success(column);
    }
}
